/* 
 * http://localhost:8080/sysmgmt/user/select?page=1&rows=3
 * 
 * {
 *     "rows": [
 *         {
 *             "email": "a@b.com",
 *             "id": "000001",
 *             "userNo": "000001",
 *             "username": "Lee000001"
 *         },
 *         {
 *             "email": "a@b.com",
 *             "id": "000002",
 *             "userNo": "000002",
 *             "username": "Lee000002"
 *         },
 *         {
 *             "email": "a@b.com",
 *             "id": "000003",
 *             "userNo": "000003",
 *             "username": "Lee000003"
 *         }
 *     ],
 *     "total": 20
 * }
 */
package com.honeybees.framework.pagination;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

import com.honeybees.framework.spring.mvc.model.ModelSupport;

/**
 * <dl>
 * <dt><b> 分页变量（请求、响应） </b></dt>
 * <p>
 * <dd>功能描述</dd>
 * </dl>
 * <p>
 * Copyright (C) All rights reserved.
 * </p>
 *
 * @param <T> 需要分页的对象——即MVC中的模型，如User、Book等。
 * @author 李远明
 * @version 2017-04-08 20:48 分页查询总页数计算方法
 *          <p>
 *          设总记录数为totalCount，每页显示数据条数为pageSize，则总页数为
 *          方法一：int totalPages = (totalCount + pageSize -1) / pageSize;
 *          其中 pageSize-1 就是 totalCount / pageSize 的最大的余数
 *          <p>
 *          方法二：int totalPages = (totalCount - 1) / pageSize + 1;
 * @since 2015-10-23 15:13:30 新建
 */
public class Page<T extends ModelSupport> implements Serializable {

    private static final long serialVersionUID = 7700089034272073421L;

    // -------------------- 分页响应参数 --------------------
    /**
     * 数据总条数
     */
    private int total;
    /**
     * 返回数据
     */
    private List<T> rows;

    /**
     * <DL>
     * <DT><B> 数据总条数 </B></DT>
     * <p>
     * <DD>详细介绍</DD>
     * </DL>
     * <p>
     *
     * @return 数据总条数
     * @version 2014-10-16 11:00:54
     */
    public int getTotal() {
        return total;
    }

    /**
     * <DL>
     * <DT><B> 数据总条数 </B></DT>
     * <p>
     * <DD>详细介绍</DD>
     * </DL>
     * <p>
     *
     * @param total 数据总条数
     * @version 2014-10-16 11:00:39
     */
    public void setTotal(int total) {
        this.total = total;
    }

    /**
     * <DL>
     * <DT><B> 返回数据 </B></DT>
     * <p>
     * <DD>详细介绍</DD>
     * </DL>
     * <p>
     *
     * @return 返回数据
     * @version 2014-10-16 11:01:16 新建
     * @version 2015-12-11 10:13:26 返回不能修改的List
     */
    public List<T> getRows() {
        return Collections.unmodifiableList(this.rows);
    }

    /**
     * <DL>
     * <DT><B> 返回数据 </B></DT>
     * <p>
     * <DD>详细介绍</DD>
     * </DL>
     * <p>
     *
     * @param rows 返回数据
     * @version 2014-10-16 11:01:24
     */
    public void setRows(List<T> rows) {
        this.rows = rows;
    }

    /**
     * {@inheritDoc}
     *
     * @author 李远明
     * @version 2016-09-14 18:03:53
     */
    @Override
    public String toString() {
        return "Page total: " + this.total + ", rows: " + (this.rows == null ? 0 : rows.size());
    }

}
